1. Field of the Invention
The present invention relates, in general, to methods and systems for storage virtualization including emulating SCSI devices, and, more particularly, to systems and methods for providing high performance SCSI device emulation with virtualization code or modules that run at least partially in the user space of a computer device or system rather than wholly within the kernel.
2. Relevant Background
Recently there has been a strong demand for storage virtualization, and studies show that the trend toward virtualizing or emulating storage devices will only increase in coming years. Virtualization of data storage devices or “storage virtualization” generally refers to the process of abstracting logical storage from physical storage. Often storage virtualization involves pooling or aggregating a variety of heterogeneous devices such as tape drives, tape libraries, and disk arrays but presenting a portion to a client device for its use based on its needs or demands (e.g., presenting a tape drive to a client device requesting data storage but physically utilizing disk storage device or portions of two or more tape drives). Virtualization of storage helps achieve location independence by abstracting the physical location of the stored data. The virtualization system presents to the user or client a logical space for data storage, and the virtualization system handles the process of mapping the logical space to the actual physical location.
Storage virtualization is often achieved in part through emulation or virtualization of storage devices to clients linked to a communications network such as a storage area network (SAN). Small Computer System Interface (SCSI) is a bus that allows computers or client devices to communicate with peripheral devices such as storage devices using a well-defined communication protocol, and tape drives, disk drives, tape libraries may be considered SCSI devices. SCSI device emulation is utilized in many products that provide storage virtialization. For example, a storage server may be adapted for storage virtualization by functioning to present on a SAN what appear to host applications or other storage clients to be SCSI devices such as tape or disk drives while, in fact, the presented device is virtual or emulated. Such storage device emulation allows product vendors to insert value adding solutions or logic behind the virtual SCSI devices. One example may be a virtual tape in which a host application believes it is writing to a tape drive where, instead, the storage server product is actually using a disk drive to store the host's data. There are many types of virtualization products with virtualization making up a large segment of the overall storage market.
One common feature of most virtualization products is the emulation of SCSI devices, which presents a number of challenges and complexities. Device emulation is typically achieved with a software program or module that rums inside the operating system (OS) space or kernel. The emulation module runs in the kernel such that it can talk or communicate with a host bus adapter (HBA) or other interface to the SAN or with a driver in the kernel that drives HBA input/output (I/O). As a result, SCSI emulation requires a significant amount of difficult and/or tedious coding as the kernel-based emulation module is written in a low level language (such as the C Programming Language) to support running inside the kernel. As such, the downsides and difficulties associated with developing kernel-resident code apply.
There remains a need for methods and systems for achieving high performance SCSI device emulation to facilitate data storage virtualization. Preferably, such methods and systems would provide improved interfacing between emulation products or modules and with business logic or storage products/modules running or present in the user space of storage server products.